package com.sakura.system.controller.yzccontroller;

import com.sakura.system.coommon.response.ResponseResult;
import com.sakura.system.entity.yzc.SysCinema;
import com.sakura.system.entity.yzc.SysSession;
import com.sakura.system.service.impl.yzcimpl.SysCinemaServiceImpl;
import com.sakura.system.service.impl.yzcimpl.SysSessionServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;


@RestController
@RequestMapping("${app.router.url}")
public class SysCinemaController extends BaseController {

    @Autowired
    private SysCinemaServiceImpl sysCinemaService;

    @Autowired
    private SysSessionServiceImpl sysSessionService;

    /**
     * 查询影院信息
     *
     * 本方法不接受任何参数，通过GET请求访问路径"/sysCinema"来触发。
     * 调用sysCinemaService中的findCinema方法查询影院信息，然后将查询结果封装进ResponseResult对象中返回。
     *
     * @return ResponseResult 包含影院信息的响应结果对象
     */
    @GetMapping("/sysCinema")
    public ResponseResult findCinema() {
        // 调用服务层方法查询影院信息，并封装响应结果
        return getResult(sysCinemaService.findCinema());
    }

    /**
     * 更新影院信息
     *
     * @param sysCinema 包含更新后影院信息的对象，通过RequestBody接收前端传来的JSON数据。
     *                  该对象需经过Validated注解验证，确保数据的合法性。
     * @return 返回操作结果，成功则返回操作状态码和消息，失败则返回错误状态码和错误消息。
     */
    @PutMapping("/sysCinema/update")
    public ResponseResult updateCinema(@Validated @RequestBody SysCinema sysCinema) {
        // 调用服务层方法更新影院信息，并获取操作结果
        return getResult(sysCinemaService.updateCinema(sysCinema));
    }

    /**
     * 根据影院ID查询影院信息，可选地根据电影ID查询排期信息。
     *
     * @param cinemaId 影院的ID，必填。
     * @param movieId 电影的ID，可选。
     * @return 返回包含影院信息和排期信息的ResponseResult对象。
     */
    @GetMapping(value = {"/sysCinema/find/{cinemaId}/{movieId}", "/sysCinema/find/{cinemaId}"})
    public ResponseResult findCinemaById(@PathVariable Long cinemaId, @PathVariable(required = false) Long movieId) {
        // 通过影院ID查询影院信息
        SysCinema cinema = sysCinemaService.findCinemaById(cinemaId);

        // 如果未指定电影ID，则默认为影院播放的第一部电影的ID
        if (movieId == null || movieId == 0) {
            movieId = cinema.getSysMovieList().size() > 0 ? cinema.getSysMovieList().get(0).getMovieId() : 0;
        }

        List<SysSession> sessions = null;
        // 如果指定了电影ID，则查询该电影的所有排期信息
        if (movieId != null && movieId != 0) {
            sessions = sysSessionService.findSessionByMovieId(movieId);
        }

        // 构建返回结果，包含影院信息和排期信息
        HashMap<String, Object> response = new HashMap<>();
        response.put("cinema", cinema);
        response.put("sessions", sessions);
        return getResult(response);
    }

}
